package cn.lingyangwl.agile.auth.model;

import cn.lingyangwl.agile.auth.controller.ThirdAuthController;
import cn.lingyangwl.agile.auth.model.rqrs.third.ThirdLoginReq;
import cn.lingyangwl.agile.auth.oauth2.model.OAuth2TokenResp;
import cn.lingyangwl.agile.auth.oauth2.model.RegisteredClient;
import cn.lingyangwl.agile.model.constants.SexEnum;
import lombok.Data;

import java.util.Optional;

/**
 * 绑定上下文
 * @author shenguangyang
 */
@Data
public class ThirdBindContent {
    /**
     * 访问令牌
     * 来自 {@link ThirdAuthController#login(String, String, ThirdLoginReq)} 返回的token
     */

    private RegisteredClient client;

    private OAuth2TokenResp tokenInfo;


    /**
     * 邮箱/手机号: 邮箱/手机号 + 验证码 校验账号是本人的
     */
    private String account;

    /**
     * 邮箱/手机号: 发送短信/邮件的任务编码
     */
    private String taskCode;

    /**
     * 邮箱/手机号: 邮箱/短信的验证码
     */
    private String verifyCode;

    /**
     * 图形验证码
     */
    private String imageCaptcha;

    /**
     * 图形验证码的uuid
     */
    private String imageUuid;


    /**
     * 用于微信/支付宝小程序获取用户手机号: 小程序会颁发一个code, 传递给后端, 然后获取手机号, 且该code只能使用一次
     */
    private String phoneCode;


    /**
     * 用户名, 可选
     */
    private String username;

    /**
     * 用户昵称, 可选
     */
    private String nickname;

    /**
     * 用户头像, 可选
     */
    private String avatar;


    private SexEnum sexEnum = SexEnum.UNKNOWN;

    public SexEnum getSexEnum() {
        return Optional.ofNullable(sexEnum).orElse(SexEnum.UNKNOWN);
    }
}
